package dao

import (
	"time"
)

// 这是 Subject 的全局公开dao对象，被service层调用!
var SubjectDao = subjectDao{}

// 专栏
// 这是 subject表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Subject struct {
	Id          int32     `json:"id" form:"id" db:"id" v:"id"`                                     // 专栏ID
	Name        string    `json:"name" form:"name" db:"name" v:"name"`                             // 专栏名
	Cover       string    `json:"cover" form:"cover" db:"cover" v:"cover"`                         // 专栏封面
	Description string    `json:"description" form:"description" db:"description" v:"description"` // 专栏描述(公告)
	Uid         int32     `json:"uid" form:"uid" db:"uid" v:"uid"`                                 // 创建者uid
	Contribute  int8      `json:"contribute" form:"contribute" db:"contribute" v:"contribute"`     // 是否允许投稿,0-不允许,1-允许
	Audit       int8      `json:"audit" form:"audit" db:"audit" v:"audit"`                         // 投稿是否需要审核,0-不需要;1-需要
	ArticleNum  int32     `json:"article_num" form:"article_num" db:"article_num" v:"article_num"` // 收录的文章数
	CreatedAt   time.Time `json:"created_at" form:"created_at" db:"created_at" v:"created_at"`     // 创建时间
	UpdatedAt   time.Time `json:"updated_at" form:"updated_at" db:"updated_at" v:"updated_at"`     // 最后更新时间

}

// 注意:这是 Subject 的私有dao对象，只能在dao层内使用!
type subjectDao struct {
	InsertTemplate func(arg Subject) (int64, error)         //插入一条记录
	UpdateTemplate func(arg Subject) (int64, error)         //更新一条记录
	DeleteTemplate func(id int64) (int64, error)            `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Subject, error)          `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg SubjectList) ([]Subject, error) //模糊分页查询
}

/*
// 这是 subject 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type SubjectPostman struct {
id
name
cover
description
uid
contribute
audit
article_num
created_at
updated_at

}*/

// 这是 subject 表的批量请求参数
type SubjectReq struct {
	List []Subject `json:"list" form:"list"`
}

// 这是 subjectDao.List()方法的请求参数
type SubjectList struct {
	Page
}
